package servlets;

import imports.ImportListaPrecios;
import interfaces.IServicioProveedor;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.util.*;

import dto.DTOListaDePrecios;
import dto.DTOProveedor;

public class ImportarListaDePrecios extends HttpServlet {

	String proveedor;
	String respuesta;
	IServicioProveedor srvProveedor;
	
	protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		

		boolean ok=getNSaveFile(request);

		if(ok){

			try {
				srvProveedor = (IServicioProveedor)Naming.lookup("//localhost/ServicioProveedor");
				ImportListaPrecios importador = new ImportListaPrecios();
				
				//System.out.println("*************Importo lista");
				DTOListaDePrecios listaDePrecios = importador.importarListaDePrecios("C:\\nuevo.xml");
				srvProveedor.guardarListaDePrecios(Integer.valueOf(proveedor), listaDePrecios);

			} catch (NotBoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		respuesta="La transferencia del archivo fue exitosa.\n"+"El id del proveedor es: " + proveedor;
		
		}
		else{
		respuesta="Fallo en transferencia de archivo.";
		}
		request.getSession().setAttribute("respuesta", respuesta); 
		response.sendRedirect("default.jsp");
		
	}
	
	public boolean getNSaveFile(HttpServletRequest request) {
		try {
		// Chequea que sea un request multipart (que se este enviando un file)
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		System.out.println("Is multipart="+isMultipart);
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// maxima talla que sera guardada en memoria
		factory.setSizeThreshold(4096);
		// si se excede de la anterior talla, se ira guardando temporalmente, en la sgte direccion
		factory.setRepository(new File("c:/"));
		ServletFileUpload upload = new ServletFileUpload(factory);
		//maxima talla permisible (si se excede salta al catch)
		upload.setSizeMax(10000000);
		List fileItems = upload.parseRequest(request);
		//obtiene el file enviado
		Iterator i = fileItems.iterator();
		FileItem fi = (FileItem)i.next();
		//graba el file enviado en el servidor local
		//path y Nombre del archivo destino (en el server)
		String path="c:/";
		String fileName="nuevo.xml";
		fi.write(new File(path, fileName));
		fi = (FileItem)i.next();
		if(fi.getFieldName().equals("choice")) {
			proveedor = fi.getString(); 
		}
		}
		catch(Exception e) {
		System.out.println(e.getMessage());
		e.printStackTrace();
		return false;
		}
		return true;
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		processRequest(request, response);
	}

	

}
